QuickOPC User's Guide and Reference
Using Callback Methods Instead of Event Handler (OPC UA Alarms & Conditions)
View with Navigation Tools
Development Models > Imperative Programming Model > Imperative Programming Model for OPC UA Alarms & Conditions > Subscribing to Information (OPC UA Alarms & Conditions) > Using Callback Methods Instead of Event Handler (OPC UA Alarms & Conditions)

The subscription methods also allow you to directly specify the callback method (delegate) to be invoked for each event notification you are subscribing to.

For detailed discussion on this subject, please refer to “Using Callback Methods Instead of Event Handlers” under the “OPC Data Access Tasks” chapter. All information presented there applies to OPC UA Alarms & Conditions as well.

The EasyUAMonitoredItemArguments object has an EventCallback property. This property specifies an optional method to be invoked for each event notification generated by the monitored item.

There is also an IEasyUAClient.SubscribeMonitoredItem extension method overload that accepts an event callback (EasyUAEventNotificationEventHandler).

// This example shows how to subscribe to event notifications and display each incoming event
// using a callback method that is provided as lambda expression.

using System;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.AddressSpace.Standard;

namespace UADocExamples.AlarmsAndConditions
{
    partial class SubscribeEvent
    {
        public static void CallbackLambda()
        {
            UAEndpointDescriptor endpointDescriptor =
                "opc.tcp://opcua.demo-this.com:62544/Quickstarts/AlarmConditionServer";

            // Instantiate the client object
            var client = new EasyUAClient();

            Console.WriteLine("Subscribing...");
            // The callback is a lambda expression the displays the event
            client.SubscribeEvent(
                endpointDescriptor,
                UAObjectIds.Server,
                1000,
                (sender, eventArgs) => Console.WriteLine(eventArgs));
            // Remark: Production code needs to check eventArgs.Exception before accessing eventArgs.EventData.

            Console.WriteLine("Processing event notifications for 30 seconds...");
            System.Threading.Thread.Sleep(30 * 1000);

            Console.WriteLine("Unsubscribing...");
            client.UnsubscribeAllMonitoredItems();

            Console.WriteLine("Waiting for 2 seconds...");
            System.Threading.Thread.Sleep(2 * 1000);
        }
    }
}

 

 

See Also